stm32H750VB+sd卡+fatfs+freertos |
您所在的位置:网站首页 › stm32h750 lwip › stm32H750VB+sd卡+fatfs+freertos |
在使用stm32H750进行sd卡的fatfs实验时,遇到了一些bug,最终在他人帮助和自己研究下完成基本功能 完整工程链接:https://download.csdn.net/download/qq_40708778/19672005?spm=1001.2014.3001.5501
具体步骤 1.配置时钟电路 2.配置sys 要用到freertos,这里使用TIM1 3.配置SDMMC1 除了PC12的CLK线,其他全部软件上拉。这里如果不上拉,可能会出现SD卡挂载不上,报出FR_NOT_READY 打开中断,在开启freertos之后,优先级会自动被改成5 4.配置fatfs 第一个地方也可以选Chinese的。我直接用英文的。防止了cubeide报出RAM用完的一个错误,用keil的同学好像不用担心。 如果sd卡的格式不是fat32,而是exfat的话,这里一定要enable,不然会挂载失败,爆出FR_NOFILESYSTEM的错误 5.freertos设置 stack设置大一些 6.clock 下面给SDMMC1,2的时钟要配置成48,配合SDMMC1设置的SDMMC clock divide factor 设置成5。最后SD卡的写入频率为48/(5+2)=6M。这个数字要小于你sd卡能承受的最大写入速率。 7.程序给大一点heap和stack
注:用cubeide可能产生挂不上的bug。 程序部分 main函数基本不用改,只改动freertos.c #include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" #include "fatfs.h" #include "sdmmc.h" UINT br,bw; //读写变量 char test_buf[1024] = {"0000\r\n"}; void StartDefaultTask(void const * argument) { /* init code for USB_DEVICE */ MX_USB_DEVICE_Init(); /* USER CODE BEGIN StartDefaultTask */ osDelay(10); retSD = f_mount(&SDFatFS,"",1); while(retSD) { retSD = f_mount(&SDFatFS,"",1); osDelay(10); } uint32_t time=0; uint32_t time2=0; char i; /* Infinite loop */ for(;;) { time = time2; test_buf[3] = time%10+'0'; time /= 10; test_buf[2] = time%10+'0'; time /= 10; test_buf[1] = time%10+'0'; time /= 10; test_buf[0] = time%10+'0'; retSD = f_open(&SDFile, "time.txt", FA_CREATE_ALWAYS | FA_WRITE | FA_READ); f_lseek(&SDFile,time2*5); retSD = f_write(&SDFile,&test_buf,strlen(test_buf),&bw) ; retSD = f_close(&SDFile); time2++; osDelay(100); }
|
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |